package view
{
	import flash.events.Event;
	
	import model.Enseignant;
	import model.Formation;
	import model.Statut;
	import model.proxy.EnseignantProxy;
	
	import org.puremvc.as3.interfaces.IMediator;
	import org.puremvc.as3.interfaces.INotification;
	import org.puremvc.as3.patterns.mediator.Mediator;
	
	import view.components.EnseignantPanel;
	import view.components.calendar.DocEvent;
	
	public class EnseignantPanelMediator extends Mediator implements IMediator 
	{ 
		
		public static const NAME : String = 'EnseignantPanelMediator'; 
			
		/** 
		 * Constructor 
		 * Listen event of the component to send notification 
		 */ 
		 public function EnseignantPanelMediator(viewComponent : EnseignantPanel) 
		 { 
		 	super(NAME, viewComponent); 
		 	viewComponent.addEventListener(EnseignantPanel.OBTENIR_LISTE_ENSEIGNANTS, obtenirListeEnseignantsNotification);
		 	viewComponent.addEventListener(EnseignantPanel.OBTENIR_LISTE_STATUTS_ENSEIGNANT, obtenirListeStatutsEnseignantNotification);
		 	viewComponent.addEventListener(EnseignantPanel.VALIDER_AJOUT_ENSEIGNANT, validerAjoutEnseignantNotification);
		 	viewComponent.addEventListener(EnseignantPanel.VALIDER_MODIF_ENSEIGNANT, validerModifEnseignantNotification);
		 	viewComponent.addEventListener(EnseignantPanel.OBTENIR_LISTE_FORMATIONS_ENSEIGNANT, obtenirListeFormationsEnseignantNotification);
		 	viewComponent.addEventListener(EnseignantPanel.SUPPRIMER_ENSEIGNANT, supprimerEnseignantNotification);
		    viewComponent.addEventListener(EnseignantPanel.NB_HEURES_EFFECTUEES, obtenirHeuresEffectueesNotification);
		 }
			
		 private function obtenirListeEnseignantsNotification(event : Event=null):void
		 { 
			 sendNotification(EnseignantPanel.OBTENIR_LISTE_ENSEIGNANTS, null);
		 }
		 
		 private function obtenirListeStatutsEnseignantNotification(event : Event=null):void
		 { 
			 sendNotification(EnseignantPanel.OBTENIR_LISTE_STATUTS_ENSEIGNANT, null);
		 }
		 
		 private function obtenirListeFormationsEnseignantNotification(event : Event=null):void
		 { 
			 sendNotification(EnseignantPanel.OBTENIR_LISTE_FORMATIONS_ENSEIGNANT, null);
		 }
			
			private function validerAjoutEnseignantNotification(event : Event=null):void
			{
				var enseignant : Enseignant = new Enseignant();
				var formation : Formation = enseignantPanel.ComboFormation.selectedItem.valueOf();
				enseignant.adr_1 = enseignantPanel.adr_1_Enseignant.text;
				enseignant.adr_2 = enseignantPanel.adr_2_Enseignant.text;
				enseignant.cp = enseignantPanel.bpEnseignant.text;
				enseignant.id_statut = (enseignantPanel.ComboStatut.selectedItem as Statut).id_statut;
				enseignant.nom = enseignantPanel.nomEnseignant.text;
				enseignant.pays = enseignantPanel.paysEnseignant.text;
				enseignant.prenom = enseignantPanel.prenomEnseignant.text;
				enseignant.ville = enseignantPanel.villeEnseignant.text;
				sendNotification(EnseignantPanel.VALIDER_AJOUT_ENSEIGNANT, [enseignant, formation]);
			}
			
			private function validerModifEnseignantNotification(event : Event=null):void
			{
				var enseignant : Enseignant = enseignantPanel.affichage.selectedItem.valueOf();
				var formation : Formation = enseignantPanel.ComboFormation.selectedItem.valueOf();
				enseignant.adr_1 = enseignantPanel.adr_1_Enseignant.text;
				enseignant.adr_2 = enseignantPanel.adr_2_Enseignant.text;
				enseignant.cp = enseignantPanel.bpEnseignant.text;
				enseignant.id_statut = (enseignantPanel.ComboStatut.selectedItem as Statut).id_statut;
				enseignant.nom = enseignantPanel.nomEnseignant.text;
				enseignant.pays = enseignantPanel.paysEnseignant.text;
				enseignant.prenom = enseignantPanel.prenomEnseignant.text;
				enseignant.ville = enseignantPanel.villeEnseignant.text;
				sendNotification(EnseignantPanel.VALIDER_MODIF_ENSEIGNANT, [enseignant, formation]);
			}
			
			private function supprimerEnseignantNotification(event : Event=null):void
			{
				var enseignant : Enseignant = enseignantPanel.affichage.selectedItem.valueOf();
				sendNotification(EnseignantPanel.SUPPRIMER_ENSEIGNANT, enseignant);
			}
			
			private function obtenirHeuresEffectueesNotification(event : DocEvent):void
			{
				sendNotification(EnseignantPanel.NB_HEURES_EFFECTUEES, event.data);
			}
			
			override public function listNotificationInterests():Array 
			 { 
			 	return [ EnseignantProxy.LISTE_ENSEIGNANTS_OBTENUE,
			 			 EnseignantProxy.LISTE_STATUTS_ENSEIGNANT_OBTENUE,
			 			 EnseignantProxy.LISTE_FORMATIONS_ENSEIGNANT_OBTENUE
			 			]; 
			 } 
			 
	
			 override public function handleNotification(note : INotification):void 
			 { 
				 switch (note.getName()) 
				 { 
				 	case EnseignantProxy.LISTE_ENSEIGNANTS_OBTENUE:
				 	{
				 		enseignantPanel.affichage.dataProvider = (note.getBody() as Array);	
				 		break;
				 	}
				 	case EnseignantProxy.LISTE_STATUTS_ENSEIGNANT_OBTENUE:
				 	{
				 		enseignantPanel.ComboStatut.dataProvider = (note.getBody() as Array);	
				 		break;
				 	}
				 	case EnseignantProxy.LISTE_FORMATIONS_ENSEIGNANT_OBTENUE:
				 	{
				 		enseignantPanel.ComboFormation.dataProvider = (note.getBody() as Array);
				 		enseignantPanel.ComboFormation.selectedIndex = 1;	
				 		break;
				 	}
				 	default:
				 	break;
			 	} 
			 }
			
			
			 private function get enseignantPanel():EnseignantPanel 
			 { 
			 	return viewComponent as EnseignantPanel; 
			 }

	}
}